// 这里是预编译指令，防止头文件被重复包含
// 非常巧妙！！
#ifndef ANIMAL_H
#define ANIMAL_H

#include <string>

using std::string;

namespace Animal {
class Animal {
 public:
  int ShoutTimes = 3;  // 叫的次数

  // 构造函数
  Animal();

  // 构造函数重载
  Animal(string animalName);

  // 析构函数
  virtual ~Animal();

  // 动物叫
  string Shout();

 protected:
  string name;  // 动物名

  // 虚函数，获取叫声
  virtual string getShoutSound() = 0;
};
}  // namespace Animal

#endif